import config from '../config'
import axiosInstance from '@/utils/axios'
exports.install = function(Vue, options) {

  /**
   * 注意:  定义type 规则时 不用做非空验证 
   *        只需要传入 required:true 即可
   * */
  /*保留两位小数*/
  // const isvalidateMoney = (rule, value, callback) => {
  //     if(value != null && value != "") {
  //         if(!validateMoneyNumber(value)) {
  //         callback(new Error('请输入正确的数字，最多保留两位小数!'))
  //         } else {
  //             callback()
  //         }
  //     }
  //     else{
  //         callback();
  //     }
  // }
  /*验证QQ号码*/
  // const isvalidateQQ= (rule, value, callback) => {        
  //     if(value != null && value != "") {
  //         if(!qq(value)) {
  //             callback(new Error('您输入的QQ号不正确!'))
  //         } else {
  //             callback()
  //         }
  //     }
  //     else{
  //         callback();
  //     }
  // }
  /*验证手机号*/
  const isvalidateMobile = (rule, value, callback) => {
    if (value != null && value != '') {
      if(value.length!==11) callback(new Error('请输入11位手机号'))
      let result = /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value)
      if (!result) {
        callback(new Error('您输入的手机号不正确!'))
      } else {
        callback()
      }
    } else {
      callback();
    }
  }

  //含有非法字符(只能输入字母、汉字)
  //    const isvalidateRegexn= (rule, value, callback) => {  
  //     if(value != null && value != "") {
  //         if(!regexn(value)) {
  //             callback(new Error('含有非法字符(只能输入字母、汉字)!'))
  //         } else {
  //             callback()
  //         }
  //     }
  //     else{
  //         callback();
  //     }
  // }
  //请输入正整数
  //    const isvalidateInteger= (rule, value, callback) => {
  //     if(value != null && value != "") {
  //         if(!integer(value)) {
  //             callback(new Error('请输入正整数!'))
  //         } else {
  //             callback()
  //         }
  //     }
  //     else{
  //         callback();
  //     }
  // }

  //远程查重
  const isRemoteRepeatCheck = (rule, value, callback) => {
    value = value.replace(/\s+/g,"")
    axiosInstance.get(config.urlPrefix + 'api/'+config.version+'/'+rule.remote+value).then(res => {
      if(res.data){
        callback(new Error('已存在'))
      }else{
        callback()
      }
    })
  }
  //验证密码复杂程度
  const isValidPassword = (rule, value, callback) => {
    if (value != null && value != '') {
      let regex = /^(?![A-Z]+$)(?![a-z]+$)(?!\d+$)(?![\W_]+$)\S{6,16}$/
      if(!regex.test(value)) {
        callback(new Error('密码不符合规则，含有小写字母、大写字母、数字、特殊符号的两种及以上'));
      } else {
        callback()
      }
    } else {
      callback()
    }
  }

  /**
   * 参数 item
   * required true  必填项
   * maxLength  字符串的最大长度
   * min 和 max 必须同时给 min < max  type=number
   * type 手机号 mobile
   *      邮箱   email
   *      网址   url
   *      各种自定义类型   定义在 src/utils/validate 中    持续添加中.......
   * */

  Vue.filter_rules = Vue.prototype.filter_rules = function(item) {
    let rules = []
    if (item.required) {
      rules.push({ required: true, message: item.message ? item.message : '该输入项为必填项!', trigger: 'blur' })
    }
    if (item.maxLength) {
      rules.push({ min: 1, max: item.maxLength, message: '最多输入' + item.maxLength + '个字符!', trigger: 'blur' })
    }
    if (item.minLength) {
      rules.push({ min: item.minLength, message: '至少输入' + item.minLength + '个字符!', trigger: 'blur' })
    }
    if (item.min && item.max) {
      rules.push({ min: item.min, max: item.max, message: '字符长度在' + item.min + '至' + item.max + '之间!', trigger: 'blur' })
    }
    if (item.remoteUrl) {
      rules.push({ validator:isRemoteRepeatCheck, remote:item.remoteUrl, trigger: 'blur' })
    }
    if (item.type) {
      let type = item.type
      switch (type) {
        case 'email':
          rules.push({ type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' })
          break
          // case 'qq':
          //     rules.push( { validator: isvalidateQQ, trigger: 'blur,change' });
          //     break;
        case 'mobile':
          rules.push({ validator: isvalidateMobile, trigger: 'blur' })
          break
        case 'date':
          rules.push({})
          break
        case 'password':
          rules.push({ validator: isValidPassword, tigger: 'blur' })
          break
          // case 'regexn':
          //     rules.push( { validator: isvalidateRegexn, trigger: 'blur,change' });
          //     break; 
          // case 'integer':
          //     rules.push( { validator: isvalidateInteger, trigger: 'blur,change' });
          //     break;      
        default:
          rules.push({type: item.type,message: '请输入正确的'+item.type,trigger:'blur'})
          break
      }
    }
    return rules
  }
}
